home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / apps / other / xxxxs.lzh / XXXX.C < prev    next >
C/C++ Source or Header  |  1990-04-22  |  3KB  |  166 lines

  1. #include <tos.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <ext.h>
  5. #include <string.h>
  6. #include <mydefs.h>
  7.  
  8. long findx(
  9.     char    *buf,
  10.     long    p,
  11.     int        n,
  12.     long    l)
  13.     {
  14.     long    q,i;
  15.     int        flag;
  16.     
  17.     for(q=p;q<l;q++)
  18.         {
  19.         if (*(buf+q)=='X')
  20.             {
  21.             flag=1;
  22.             for(i=0L;i<(long)n;i++)
  23.                 if (*(buf+q+i)!='X')
  24.                     flag=0;
  25.             if (flag)
  26.                 return(q);
  27.             }
  28.         }
  29.     return(q);
  30.     }
  31.  
  32. void doit(
  33.     char    *name,
  34.     long    l,
  35.     int        s,
  36.     int        c,
  37.     int        x,
  38.     int        d)
  39.     {
  40.     char    *sbuf;
  41.     char    *dbuf;
  42.     int        i,e;
  43.     long    p;
  44.     int        fd;
  45.     int        f=0;
  46.     char    *xs="%nd";
  47.     
  48.     *(xs+1)=x+'0';
  49.     sbuf = malloc(l);
  50.     dbuf = malloc(l);
  51.     if (dbuf==NULL)
  52.         {
  53.         puts("\007 Not enough memory!");
  54.         if (sbuf!=NULL)
  55.             free(sbuf);
  56.         exit(-1);
  57.         }
  58.     fd=Fopen(name,READ);
  59.     if (fd<0)
  60.         {
  61.         puts("\007 Error opening file!");
  62.         exit(-3);
  63.         }
  64.     Fread(fd,l,sbuf);
  65.     Fclose(fd);
  66.     memcpy(dbuf,sbuf,l);
  67.     for(e=d,p=0L,i=s;i<s+c;i++)
  68.         {
  69.         printf("%6d%s",i,"\010\010\010\010\010\010");
  70.         p=findx(dbuf,p,x,l);
  71.         if (p>=l)
  72.             {
  73.             if (i==s)
  74.                 {
  75.                 puts("\007 XXXXs sequence not found in file");
  76.                 exit(-2);
  77.                 }
  78.             else
  79.                 {
  80.                 *(name+strlen(name)-5L)=(f%10)+'0';
  81.                 *(name+strlen(name)-6L)=(f/10)%10+'0';
  82.                 *(name+strlen(name)-7L)=(f/100)%10+'0';
  83.                 ++f;
  84.                 puts(name);
  85.                 fd=Fcreate(name,0);
  86.                 Fclose(fd);
  87.                 fd=Fopen(name,WRITE);
  88.                 Fwrite(fd,l,dbuf);
  89.                 Fclose(fd);
  90.                 p=0L;
  91.                 memcpy(dbuf,sbuf,l);
  92.                 }
  93.             }
  94.         else
  95.             {
  96.             sprintf(dbuf+p,xs,i);
  97.             --e;
  98.             if (e==0)
  99.                 e=d;
  100.             else
  101.                 --i;
  102.             }
  103.         }
  104.     *(name+strlen(name)-5L)=(f%10)+'0';
  105.     *(name+strlen(name)-6L)=(f/10)%10+'0';
  106.     *(name+strlen(name)-7L)=(f/100)%10+'0';
  107.     fd=Fcreate(name,0);
  108.     Fclose(fd);
  109.     fd=Fopen(name,WRITE);
  110.     Fwrite(fd,l,dbuf);
  111.     Fclose(fd);
  112.     }
  113.  
  114.  
  115. int main(
  116.     int        argc,
  117.     char     **argv,
  118.     char    *shellp)
  119.     {
  120.     int start = 1000;
  121.     int count =  250;
  122.     int xxxxs =    4;
  123.     int dupli =    2;
  124.     
  125.     char name[128];
  126.     DTA     *dta;
  127.  
  128.     puts("XXXX Counter 1.0 -- (C)1990 Spieu!soft");
  129.     if ((argc<2)||((argc>2)&&(argc!=6)))
  130.         {
  131.         puts("\007 Error: file name missing");
  132.         puts("--------------------------------------");
  133.         puts("filename.ext [-start -count -XXXXs -duplicates]");
  134.         puts("Replaces XXXXs with incremental valuse");
  135.         puts("e.g. xxxx -1000 -250 -4 -2 thistext.doc");
  136.         puts("  or xxxx thistext.doc");
  137.         puts("--------------------------------------");
  138.         puts("defaults-");
  139.         puts(" start: 1000");
  140.         puts(" count:  250");
  141.         puts(" XXXXs:    4");
  142.         puts(" dupl.:    2");
  143.         return(-1);
  144.         }
  145.     if (argc >2)
  146.         {
  147.         start=atoi(argv[3]+1);
  148.         count=atoi(argv[4]+1);
  149.         xxxxs=atoi(argv[5]+1);
  150.         dupli=atoi(argv[6]+1);
  151.         }
  152.     
  153.     strcpy(name,argv[1]);
  154.     if (Fsfirst(name,0)>=0)
  155.         {
  156.         dta = Fgetdta();
  157.         strncpy(name,argv[1],128);
  158.         doit(name,dta->d_length,start,count,xxxxs,dupli);
  159.         }
  160.     else
  161.         {
  162.         puts(name);
  163.         puts("\007 Error: file not found!");
  164.         }
  165.     return(0);
  166.     }